package com.hanamaki.demo02;

import io.appium.java_client.android.Activity;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class AppiumAPI {
    static AndroidDriver<WebElement> driver;
    @BeforeMethod
    public void setUp() throws MalformedURLException {
//        1. 创建配置对象   new
        DesiredCapabilities cp = new DesiredCapabilities();
//          添加配置信息
        cp.setCapability("deviceName", "127.0.0.1:62001");
        cp.setCapability("platformName", "Android");
        cp.setCapability("appPackage", "com.handsgo.jiakao.android");
        cp.setCapability("appActivity", "com.handsgo.jiakao.android.splash.Login");
        cp.setCapability("noReset", "true");
//        添加一个 配置 AutomationName
        cp.setCapability("automationName", "uiautomator2");
//        如何启动？
//        驱动 对象
        URL url = new URL("http://localhost:4723/wd/hub");
//        注册 需要打开的 驱动 以及url 以及 对应的软件
        driver = new AndroidDriver<>(url, cp);

//       为 全局元素 添加  隐式等待时间  30
        WebDriver.Timeouts timeouts = driver.manage().timeouts();
        timeouts.implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void test() throws InterruptedException, IOException {

        String alert = "com.handsgo.jiakao.android:id/closeIv";
        if (byElement(By.id(alert))) {
            driver.findElement(By.id(alert)).click();
        } else {
            System.out.println("没找到！");
        }

//        截图
        File screenshotAs = driver.getScreenshotAs(OutputType.FILE);
//        保存的位置
        FileUtils.copyFile(screenshotAs, new File("e:\\jkbd.png"));


//        appium中  常用的  API
//        1. 获得 安卓中的页面源代码
        String pageSource = driver.getPageSource();
        System.out.println(pageSource);



//        获得当前正在运行着的软件的 类名（界面）
        String s = driver.currentActivity();
        System.out.println(s);



//        获得 屏幕的  DPI
        Long displayDensity = driver.getDisplayDensity();
        System.out.println(displayDensity);

//        判断 软件是否被安装  通过对应的 软件的包名
        boolean appInstalled = driver.isAppInstalled("com.handsgo.jiakao.android");
        System.out.println(appInstalled);

//        获得 系统的时间
        String deviceTime = driver.getDeviceTime();
        System.out.println(deviceTime);

        String deviceTime1 = driver.getDeviceTime("yyyy-mm-dd");
        System.out.println(deviceTime1);

//        获得 当前的 自动化引擎
        String automationName = driver.getAutomationName();
        System.out.println(automationName);

//        获得 当前屏幕的 横竖屏状态
        ScreenOrientation orientation = driver.getOrientation();
        System.out.println(orientation);

//        发送一个事件   音量增加 返回桌面
        KeyEvent keyEvent = new KeyEvent();
//        设置想要发送的事件
        keyEvent.withKey(AndroidKey.VOLUME_UP);

        driver.pressKey(keyEvent);

        keyEvent.withKey(AndroidKey.HOME);
        driver.pressKey(keyEvent);



        //        重置应用的数据
        driver.resetApp();




    }

    public static boolean byElement(By by) {
//         ctrl + alt +t
        try {
            driver.findElement(by);
            return true;
        } catch (Exception e) {
            return false;
        }
    }


    @AfterMethod
    public void release() {
//        driver.quit();
    }

}
